/*
 * Copyright 2014-2016 CyberVision, Inc.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#import "DefaultLogCollector.h"
#import "AvroBytesConverter.h"
#import "LogRecord.h"
#import "KaaLogging.h"

#define TAG @"DefaultLogCollector >>>"

@implementation DefaultLogCollector

- (BucketRunner *)addLogRecord:(KAADummyLog *)record {
    @synchronized(self) {
        BucketRunner *runner = [[BucketRunner alloc] init];
        __weak typeof(self) weakSelf = self;
        [[self.executorContext getApiExecutor] addOperationWithBlock:^{
            @try {
                BucketInfo *bucketInfo = [weakSelf.storage addLogRecord:[[LogRecord alloc] initWithRecord:record]];
                weakSelf.bucketInfoDictionary[@(bucketInfo.bucketId)] = bucketInfo;
                [weakSelf addDeliveryRunner:runner byBucketInfoKey:@(bucketInfo.bucketId)];
            }
            @catch (NSException *exception) {
                DDLogWarn(@"%@ Can't serialize log record: %@", TAG, record);
            }
            [weakSelf uploadIfNeeded];
        }];
        return runner;
    }
}

@end
